}
#endif
-const Babl *babl_trc_lut_find (float *lut, int lut_size)
+static int
+babl_lut_match_gamma (float *lut, int lut_size, float gamma)
{
- int i;
int match = 1;
-
- /* look for linear match */
- for (i = 0; match && i < lut_size; i++)
- if (fabs (lut[i] - i / (lut_size-1.0)) > 0.015)
- match = 0;
- if (match)
- return babl_trc_gamma (1.0);
-
- /* look for 2.2 match: */
- match = 1;
+ int i;
if (lut_size > 1024)
- {
- for (i = 0; match && i < lut_size; i++)
- {
-#if 0
- fprintf (stderr, "%i %f %f\n", i,
- lut[i],
- pow ((i / (lut_size-1.0)), 2.2));
-#endif
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 2.2)) > 0.0001)
- match = 0;
- }
- }
- else
{
for (i = 0; match && i < lut_size; i++)
{
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 2.2)) > 0.001)
+ if (fabs (lut[i] - pow ((i / (lut_size-1.0)), gamma)) > 0.0001)
match = 0;
}
}
- if (match)
- return babl_trc_gamma(2.2);
-
-
- /* look for 1.8 match: */
- match = 1;
- if (lut_size > 1024)
- {
- for (i = 0; match && i < lut_size; i++)
- {
-#if 0
- fprintf (stderr, "%i %f %f\n", i,
- lut[i],
- pow ((i / (lut_size-1.0)), 1.8));
-#endif
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 1.8)) > 0.0001)
- match = 0;
- }
- }
else
{
for (i = 0; match && i < lut_size; i++)
{
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 1.8)) > 0.001)
+ if (fabs (lut[i] - pow ((i / (lut_size-1.0)), gamma)) > 0.001)
match = 0;
}
}
- if (match)
- return babl_trc_gamma(2.2);
+ return match;
+}
+const Babl *babl_trc_lut_find (float *lut, int lut_size)
+{
+ int i;
+ int match = 1;
+
+ /* look for linear match */
+ for (i = 0; match && i < lut_size; i++)
+ if (fabs (lut[i] - i / (lut_size-1.0)) > 0.015)
+ match = 0;
+ if (match)
+ return babl_trc_gamma (1.0);
/* look for sRGB match: */
match = 1;
if (lut_size > 1024)
{
- for (i = 0; match && i < lut_size; i++)
- {
- if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.0001)
- match = 0;
- }
+ for (i = 0; match && i < lut_size; i++)
+ {
+ if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.0001)
+ match = 0;
+ }
}
else
{
if (match)
return babl_trc ("sRGB");
+ if (babl_lut_match_gamma (lut, lut_size, 2.2))
+ return babl_trc_gamma(2.2);
+
+ if (babl_lut_match_gamma (lut, lut_size, 1.8))
+ return babl_trc_gamma(1.8);
+
return NULL;
}
-